// converter.js
const ffmpeg = require("fluent-ffmpeg")
const fs = require("fs")
const path = require("path")

const input = path.resolve(__dirname, "input2.mp4")
const output = path.resolve(__dirname, "../public/single")

convertToHLS(input, output)
  .then(res => {
    console.log(res)
  })
  .catch(err => {
    console.error(err.message)
  })

function convertToHLS(inputPath, outputDir) {
  return new Promise((resolve, reject) => {
    // 确保输出目录存在
    if (!fs.existsSync(outputDir)) {
      fs.mkdirSync(outputDir, { recursive: true })
      console.log("输出目录创建成功")
    }

    // 检查输入文件是否存在
    if (!fs.existsSync(inputPath)) {
      reject(new Error(`输入文件不存在: ${inputPath}`))
      console.log(`输入文件不存在: ${inputPath}`)
      return
    }

    console.log(`开始转换: ${inputPath} -> ${outputDir}`)

    ffmpeg(inputPath)
      .videoCodec("libx264")
      .audioCodec("aac")
      .outputOptions([
        "-hls_time 10", // 分段时间
        "-hls_list_size 0", // 分段大小
        `-hls_segment_filename ${outputDir}/segment_%03d.ts`, // 分段名
        "-f hls" // 转换格式
      ])
      .output(`${outputDir}/index.m3u8`)
      .on("start", commandLine => {
        console.log("FFmpeg命令:", commandLine)
      })
      .on("progress", progress => {
        if (progress.percent) {
          console.log(`转换进度: ${Math.round(progress.percent)}%`)
        }
      })
      .on("stderr", stderrLine => {
        // console.log("FFmpeg输出:", stderrLine)
      })
      .on("end", () => {
        console.log("转换完成!")
        resolve(`${outputDir}/index.m3u8`)
      })
      .on("error", (err, stdout, stderr) => {
        console.error("转换失败:", err.message)
        reject(err)
      })
      .run()
  })
}
